﻿#define  _CRT_SECURE_NO_WARNINGS 1
//1. 大小写转换
//设计一个程序，输入一行字符串，将其中大写转为小写，小写转为大写，其余字符不变
//(字符串长度 < 100)
//	样例输入：HELLO WORLD!
//	样例输出：Hello World!
#include <stdio.h>   // 使用printf  scanf
#include <string.h>  // 使用strlen等函数
//int main()
//{
//	// 定义一个字符数组，用于存储输入的字符串，最多99个字符+1个结束符"\0"
//	char str[100];
//
//	// 提示用户输入字符串
//	printf("请输入一行字符串（长度小于100）: ");
//
//	// 读取用户输入的字符串，存储到str数组中
//	// %[^\n]表示读取所有字符，直到换行符\n为止 但不包括换行符和本身
//	scanf("%[^\n]", str);
//
//	// 获取字符串的长度，用于后续遍历
//	int len = strlen(str);
//
//	// 遍历字符串中的每个字符
//	for (int i = 0; i < len; i++)
//	{
//		// 判断当前字符是否为大写字母（ASCII范围：65-90）
//		if (str[i] >= 'A' && str[i] <= 'Z')
//		{
//			//如果是大写字母，转换为小写：大写字母 + 32 = 对应的小写字母(ASCII 差值)
//			str[i] += 32;
//
//		}
//
//		// 判断当前字符是否为小写字母 (ASCII 范围：97-122)
//		else if (str[i] >= 'a' && str[i] <= 'z')
//		{
//			// 如果是小写字母，转换为大写: 小写字母 - 32 = 对应大写字母（ASCII 差值）
//			str[i] -= 32;
//		}
//		// 其他字符无需处理
//
//	}
//	printf("转换后的字符串: %s\n", str);
//
//	return 0;
//}



//2. 开挂很危险
//最近网络盗号严重，张三又喜欢开外挂(大家不要学)
//于是张三打算出一个安全的密码，避免开外挂后被盗号
//请各位小伙伴帮忙，判定一下张三的密码是否安全
//安全密码的判定 :
//1. 长度在8~16之间
//2. 开头必须是大写
//3 * .密码最少包含一个小写字母，一个数字，一个特殊符号
//特殊符号包括!@#$ % *
//设计一个程序，输入密码字符串
//如果密码安全，打印true，否则打印false
//(字符串长度 < 100)
//样例输入：
//Aa123!!!!!
//样例输出：
//true
#include <ctype.h> // 为了使用 isupper,islower,isdigit 分别用来判断大写，小写，数字
//int main()
//{
//	// 定义字符数组存储密码，长度100（题目要求字符串长度<100）
//	char password[100];
//
//	// 读取输入的密码（使用%s读取，遇到空格或换行停止，符号密码输入场景）
//	scanf("%s", password);
//
//	// 计算密码长度
//	int len = strlen(password);
//	// 检查长度是否在8-16之间，若不在之间判定为不安全
//	if (len < 8 || len>16)
//	{
//		printf("false\n");
//		return 0;
//	}
//
//	// 检查密码开头是否为大写字母(使用isupeer函数判断)
//	// 不是大写字母 则false
//	if (!isupper(password[0]))
//	{
//		printf("false\n");
//		return 0;
//	}
//
//	//定义标志位，分别记录是否包含小写字母，数字，特殊符号
//	int hasLower = 0;   // 小写字母标志（0：未包含 ，1：已包含）
//	int hasDigit = 0;   // 数字标志
//	int hasSpecial = 0; // 特殊符号标志
//
//	//遍历密码中的每个字符（从索引1开始，索引0已检查过是大写）
//	for (int i = 0; i < len; i++)
//	{
//		char c = password[i];
//
//		// 检查是否为小写字母（使用islower函数）
//		if (islower(c))
//		{
//			hasLower = 1;
//		}
//
//		// 检查是否为数字 (使用isdigit函数)
//		else if (isdigit(c))
//		{
//			hasDigit = 1;
//		}
//
//		// 检查是否为特殊符号（!@#$%*中的一个）
//		else if (c == '!' || c == '@' || c == '#' || c == '$' || c == '%' || c == '*')
//		{
//			hasSpecial = 1;
//		}
//		// 其他字符不影响标志位，题目未禁止，只需满足必要条件即可
//	}
//
//	// 若三个标志位都为1，则密码安全，反之
//	if (hasLower && hasDigit && hasSpecial)
//	{
//		printf("ture\n");
//	}
//	else
//	{
//		printf("false\n");
//	}
//
//
//
//	return 0;
//}





//3. 密码加密
//自从上次张三密码变复杂后，再也没有被盗过号
//但他觉得密码还是不够复杂，于是又进行了二次加密
//然后，他忘记二次加密后的密码了小伙伴赶紧帮他找找
//张三的加密方式是这样的 :
//对于每个字母和数字，按字母表 / 数字顺序往后挪5位
//(如果超过了，则从头开始，比如z转换后变成e，'9'转换后变成'4')
//符号不变
//如密码 : Aazz09!!!
//加密后 : ffee54!!!
//设计一个程序，输入加密前的密码，打印加密后的密码
//(密码长度 <= 16)
//样例输入：Aazz09!!!
//样例输出：ffee54!!!
int main()
{
	// 定义字符数组存储加密前的密码，最大长度16
	char password[17];   // 多留一位给字符结束符"\0"

	// 读取输入的密码(使用%s读取，遇到空格或换行停止)
	scanf("%s", password);

	// 计算密码长度，用于遍历每个字符
	int len = strlen(password);

	//遍历密码中的每个字符，依次进行加密处理
	for (int i = 0; i < len; i++)
	{
		// 获取当前字符
		char c = password[i];

		// 处理大写字母: A-Z
		if (c >= 'A' && c <= 'Z')
		{
			// 往后挪五位，超过'Z'则从头开始（使用模的运算实现循环）
			// 先转换0-25范围（A=0，Z =25）,加5后模26，再转回ASCII
			c = (c - 'A' + 5) % 26 + 'A';
		}

		// 处理小写字母: a-z
		else if (c >= 'a' && c <= 'z')
		{
			c = (c - 'a' + 5) % 26 + 'a';
		}

		//处理数字0-9
		else if (c >= '0' && c <= '9')
		{
			// 数字0-9，加5后模10  （超过9从头算，如9+5=14 即14%10=4）
			c = (c - '0' + 5) % 10 + '0';

		}

		// 特殊符号不处理
		else
		{

		}
		// 更新当前位置为加密后的值
		password[i] = c;
	}
	printf("%s\n", password);
	return 0;
}